{%extends "base.html"%}
{%block body%}

<p>Contributions of new problems are welcome. The best time to write new problems is
just after you learn something new.  Then you can remember what was interesting or
difficult about your own learning experience.</p>

<p>Don't wait for your teacher to assign problems.  Jump right in and get ahead of the class.</p>

<h3>Creative Commons License</h3>
By submitting a problem, you are certifying:<br>
<ol>
  <li>The problem you are submitting is your own work, or is a derivative work consistent with the original author's license.</li>
  <li>You agree that your submission will be licensed under the <a href="http://creativecommons.org/licenses/by-sa/3.0">Creative Commons</a> license. This means that others may modify and share your work under the same license.</li>
</ol>

<h3>The following fields need to be filled in:</h3>
<p><strong>Name:</strong> A nice creative name for the problem.</p>
<p><strong>Categories:</strong> Categories the problem belongs to.</p>
<p><strong>Description:</strong> Funny stories are nice, but make sure you convey the essentials of the problem in a clear, concise manner.</p>
<p><strong>Examples:</strong> These are an essential part of the problem description, clarifying what is meant by the plain English description. Use doctest format.</p>
<p><strong>Skeleton:</strong> What you want the student to start with.  This should include hints  or other comments, and any non-fundamental details, such as where to find a particular function in an import, or the final roundoff in a returned float.</p>
<p><strong>Tests:</strong> These are the detailed doctests that cover all possibilities, including "off-by-one" errors, and other edge cases.  Include your examples also, so they can be saved as unit tests if you later change or delete an example.</p>
<p><strong>Other tests:</strong> This field is optional. These are doctests you don't want the student to see.  This is to see if a student really got it right, or is just taking a shortcut.  Let's say he submits a solution, and sees that he has a failure on a test that expected 4, where his solution returned 3.  Instead of figuring out that he has an "off-by-one" problem, due to his misunderstanding of the way the range() function works, he just sticks in an initial test.  If the inputs match exactly the failing testcase, return 4.  He gets full score on the problem, but hasn't really solved it.</p>
<p><strong>Solution:</strong> This field is optional. Students may see this if we decide to add a "Show Solution" button, so make it an example of good programming.</p>
{%endblock%}
